import { DataTypes, Model } from "sequelize";
import sequelize from "../config/database";

export enum RoleName {
    ADMIN = 'admin', // 管理员
    USER = 'user', // 普通用户
    Member = 'member', // 会员

}

class Role extends Model {
    public id!: number; // 主键，自动生成的 ID
    public name!: RoleName; // 角色名称，枚举类型 RoleName
    public permissions!: string[]; // 权限列表，字符串数组类型
}

Role.init({
    id: {
        type: DataTypes.INTEGER, // 使用整数类型作为主键
        primaryKey: true, // 主键
        autoIncrement: true, // 自增 
        allowNull: false, // 不允许为空
    },
    name: {
        type: DataTypes.ENUM(...Object.values(RoleName)), // 使用枚举类型作为角色名称，取值范围为 RoleName 枚举中的值
        allowNull: false, // 不允许为空 
        unique: true, // 唯一约束，确保角色名称的唯一性
    },
    permissions: {
        type: DataTypes.JSON, // 使用数组类型作为权限列表，每个元素为字符串类型
        allowNull: false, // 不允许为空
        defaultValue: [], // 默认值为空数组，即没有权限 
    }
},{
    sequelize, // 数据库连接实例，从 database.ts 导入的 sequlize 实例
    modelName: 'Role', // 模型名称，用于 Sequelize 的内部管理
    tableName: 'roles', // 数据库表名，默认为模型名称的复数形式，这里指定为 'roles'
});

export default Role;